
const db = require('../../MySql')
/**
     * 构造函数 - 创建考试答卷答案记录对象实例
     * 用于封装考生在考试中对每道题目选项的选择情况
     * 对应数据库中的 el_paper_qu_answer 表，记录考生选择的答案选项
     * 
 */
class el_paper_qu_answer {
    /**
     * @param {string} id - 记录ID，唯一标识符
     * @param {string} paper_id - 试卷ID，关联的考试答卷
     * @param {string} answer_id - 答案ID，关联的选项（el_qu_answer表）
     * @param {string} qu_id - 题目ID，关联的试题
     * @param {boolean} is_right - 是否正确，该选项在标准答案中是否正确
     * @param {boolean} checked - 是否选中，考生是否选择了该选项
     * @param {number} sort - 排序序号，选项在题目中的显示顺序
     * @param {string} abc - 选项标识，如'A'、'B'、'C'等字母标识
     * 
     * 使用示例：
     * const paperAnswer = new el_paper_qu_answer(
     *     'pqa001',           // 记录ID
     *     'paper123',         // 试卷ID
     *     'answer456',        // 答案选项ID
     *     'qu789',            // 题目ID
     *     true,               // 该选项是正确答案
     *     true,               // 考生选择了该选项
     *     1,                  // 第一个选项
     *     'A'                 // 选项A
     * );
     */
    constructor(id, paper_id, answer_id,qu_id,is_right,checked,sort,abc) {
        this.id = id
        this.paper_id = paper_id
        this.answer_id = answer_id
        this.qu_id = qu_id
        this.is_right=is_right
        this.checked=checked
        this.sort=sort
        this.abc=abc
    }

     /**
     * @param {string} paperId - 试卷ID，关联的考试答卷
     * @param {string} quId - 题目ID，关联的试题
     * @returns {Promise<object[]>} - 数据库操作结果对象数组
     * 功能描述：
     * 根据试卷ID和题目ID查询考试答卷答案记录对象实例数组，用于获取该试卷中该题目下的所有选项选择记录
     */
    static async findPaperQuAnswerByPaperIdAndQuId(paperId, quId){
        const [results] = await db.query('select * from el_paper_qu_answer where paper_id=? and qu_id=?', [paperId, quId])
        return results
    }

    /**
     * @param {string} paperId - 试卷ID，关联的考试答卷
     * @returns {Promise<object[]>} - 数据库操作结果对象数组
     * 根据试卷ID查询考试答卷答案记录对象实例数组，用于获取该试卷下的所有选项选择记录
     */
    static async findPaperQuAnswerByPaperId(paperId){
        const [results] = await db.query('select * from el_paper_qu_answer where paper_id=?', [paperId])
        return results
    }

    /**
     * @param {el_paper_qu_answer} paperQuAnswer - 考试答卷答案记录对象实例
     * @returns {Promise<object>} - 数据库操作结果对象
     * 功能描述：
     * 将考试答卷答案记录对象实例插入到数据库中
     */
    static async insertPaperQuAnswer(paperQuAnswer) {
        const [results] = await db.query(`
            insert into el_paper_qu_answer (id, paper_id, answer_id,qu_id,is_right,checked,sort,abc)
            values (?, ?, ?, ?, ?, ?, ?, ?)
        `, [paperQuAnswer.id, paperQuAnswer.paper_id, paperQuAnswer.answer_id, paperQuAnswer.qu_id, paperQuAnswer.is_right, paperQuAnswer.checked, paperQuAnswer.sort, paperQuAnswer.abc])
        if (results.affectedRows === 0) {
            throw new Error('插入考试答卷答案记录失败')
        }
        
        return results
    }

    /**
     * @param {string} qu_id - 题目ID，关联的试题
     * @returns {Promise<object>} - 数据库操作结果对象
     * 功能描述：
     * 将考试答卷答案记录对象实例插入到数据库中
     */
    static async updateChecked(qu_id){
        const [results]= await db.query('update el_paper_qu_answer set checked=0 where qu_id=?', [qu_id])
        return results
    }

     /**
     * @param {string} quId - 题目ID，关联的试题
     * @returns {Promise<object>} - 数据库操作结果对象
     * 功能描述：
     * 根据试卷ID删除考试答卷答案记录对象实例数组，用于删除该试卷下的所有选项选择记录
     */
    static async deletePaperQuAnswerByQuId(quId){
        const [results] = await db.query('delete from el_paper_qu_answer where qu_id=?', [quId])
        return results
    }

    /**
     * @param {string} paperId - 试卷ID，关联的考试答卷
     * @param {string} quId - 题目ID，关联的试题
     * @returns {Promise<object>} - 数据库操作结果对象
     * 功能描述：
     * 根据试卷ID和题目ID删除考试答卷答案记录对象实例，用于删除该试卷下该题目下的所有选项选择记录
     */
    static async deletePaperQuAnswerByPaperIdAndQuId(paperId, quId){
        const [results] = await db.query('delete from el_paper_qu_answer where paper_id=? and qu_id=?', [paperId, quId])
        return results
    }

}

module.exports = el_paper_qu_answer